package cn.aku.Plus;
import java.util.HashMap;
import java.util.Map;

/*
 * HashMap工作原理
 *  1）调用对象的hashCode()方法，结合HashMap的大小
 *    会计算出一个下标
 *  2）如果当前桶没有元素，直接存储 key value,返回null
 *  3)如果当前桶有元素，会调用key的equals方法，
 *    如果equals比较是false,做链表处理  k1,v1  k2,v2
 *    如果equals比较是true,替换处理，返回替换掉的元素
 * HashMap扩容
 *   0.75  7 10  避免hash碰撞    重复
 *   16
 *
 */
public class Demo1 {
    public static void main(String[] args) {
        Map<Foo,Integer> map = new HashMap<>();
        Foo f1 = new Foo();
        //System.out.println(f1);//调用toString()
        map.put(new Foo(), 1); //hashCode
        map.put(new Foo(), 2); //hashCode equals
        map.put(new Foo(), 3); //hashCode equals equals
        System.out.println("over");
    }
}
class Foo{
    public String toString() {
        System.out.println("调用toString()方法...");
        return null;
    }
    String name;
    int id;
    public int hashCode() {
        System.out.println("调用了hashCode方法...");
        return 100;
    }
    public boolean equals(Object o) {
        System.out.println("调用了equals方法...");
        return false;
    }
}

